'''
列表是可变的、有序的元素集合，支持任意类型元素（异构性）：
'''
#创建列表
my_list = [1, "apple", True, [3.14, 2.71]]  # 包含整数、字符串、布尔值和嵌套列表
numbers = list(range(5))       # 使用list()函数：[0, 1, 2, 3, 4]
squares = [x**2 for x in range(5)]  # 列表推导式：[0, 1, 4, 9, 16]
matrix = [[1, 2], [3, 4]]      # 嵌套列表

# 和字符串一样的切片
letters = ['a', 'b', 'c', 'd', 'e']
print(letters[2])      # 输出: c（正向索引）
print(letters[-2])     # 输出: d（反向索引）
print(letters[1:4:2])  # 输出: ['b', 'd']（切片）


#修改元素
nums = [1, 2, 3]
nums[1] = 20          # 单个元素修改：[1, 20, 3]
nums[1:3] = [4, 5]    # 切片替换：[1, 4, 5]


#添加元素
fruits = ["apple", "banana"]
fruits.append("cherry")       # 末尾添加：['apple', 'banana', 'cherry']
fruits.insert(1, "blueberry")  # 指定位置插入：['apple', 'blueberry', 'banana', 'cherry']
fruits.extend(["date", "elderberry"])  # 扩展列表：['apple', 'blueberry', 'banana', 'cherry', 'date', 'elderberry']


#删除元素
nums = [1, 2, 3, 2, 4]
nums.remove(2)        # 删除首个值为2的元素：[1, 3, 2, 4]
popped = nums.pop(1)  # 删除索引1的元素并返回：popped=3，nums=[1, 2, 4]
del nums[0]           # 删除索引0的元素：[2, 4]
nums.clear()          # 清空列表：[]

# 查找元素
letters = ['a', 'b', 'c', 'b']
print(letters.index('b'))  # 首个匹配的索引：1
print('c' in letters)      # 判断元素是否存在：True
print(letters.count('b'))  # 统计元素出现次数：2


#排序 反转
nums = [3, 1, 4]
nums.sort()           # 原地排序：[1, 3, 4]
reversed_nums = nums[::-1]  # 切片反转：[4, 3, 1]
nums.reverse()        # 原地反转：[4, 3, 1]

# 列表推导式的语法
## 生成偶数列表
evens = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]
## 嵌套推导式
matrix = [[i*j for j in range(3)] for i in range(2)]  # [[0, 0, 0], [0, 1, 2]]


# 多维列表
# 3x3矩阵
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][2])  # 访问第二行第三列：6



#拷贝
# 浅拷贝（只复制外层引用）
original = [1, [2, 3]]
shallow_copy = original.copy()  # 或 list(original)、original[:]
shallow_copy[1][0] = 99         # 修改嵌套列表会影响原列表
print(original)  # 输出: [1, [99, 3]]

# 深拷贝（完全复制所有嵌套对象）
import copy
deep_copy = copy.deepcopy(original)
deep_copy[1][0] = 100           # 不影响原列表
print(original)  # 输出: [1, [99, 3]]


#常用函数
len([1, 2, 3]) #返回列表长度
max([1, 5, 3]) #返回最大值
min([1, 5, 3])#返回最小值
sum([1, 2, 3])#求和（元素需为数值类型）
sorted([3, 1, 2])#返回新的排序后列表（非原地）
list(reversed([1, 2, 3]))#返回反向迭代器（需转换为列表）



#内存使用量
import sys
lst = []
print(sys.getsizeof(lst))  # 初始大小（通常为64字节）
for i in range(10):
    lst.append(i)
    print(f"添加{i}后大小：{sys.getsizeof(lst)}")  # 每次扩容会预留空间


#遍历
for item in ["apple", "banana", "cherry"]:
    print(f"I like {item}")


#Queue 双向列表
from collections import deque
queue = deque()
queue.append(1)  # 入队
queue.append(2)
print(queue.popleft())  # 出队：1（O(1)时间复杂度）




